#include <iostream>
#include <algorithm>
#include <cstdio>
#include <array>
#include <vector>
#include <bitset>
#define pii pair <int, int>
using namespace std;
#ifdef ONLINE_JUDGE

#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
char buf[1 << 23], *p1 = buf, *p2 = buf, ubuf[1 << 23], *u = ubuf;

#endif
int read() {
    int p = 0, flg = 1;
    char c = getchar();
    while (c < '0' || c > '9') {
        if (c == '-') flg = -1;
        c = getchar();
    }
    while (c >= '0' && c <= '9') {
        p = p * 10 + c - '0';
        c = getchar();
    }
    return p * flg;
}
void write(int x) {
    if (x < 0) {
        x = -x;
        putchar('-');
    }
    if (x > 9) {
        write(x / 10);
    }
    putchar(x % 10 + '0');
}
bool _stmer;

#define fi first
#define se second

const int N = 405, M = 2e5 + 5, mod = 998244353;

array <bitset <N>, N> vis;
array <pii, M> edge;

array <array <int, N>, N> f;

int pow_(int x, int k, int p) {
    int ans = 1;
    while (k) {
        if (k & 1) ans = 1ll * ans * x % p;
        x = 1ll * x * x % p;
        k >>= 1;
    }
    return ans;
}

array <int, M> fac, inv;

void init(int n) {
    fac[0] = 1;
    for (int i = 1; i <= n; i++)
        fac[i] = 1ll * fac[i - 1] * i % mod;
    inv[n] = pow_(fac[n], mod - 2, mod);
    for (int i = n; i; i--)
        inv[i - 1] = 1ll * inv[i] * i % mod;
}

int C(int n, int m) {
    if (n < m) return 0;
    return 1ll * fac[n] * inv[m] % mod * inv[n - m] % mod;
}

void Mod(int &x) {
    if (x >= mod) x -= mod;
    if (x < 0) x += mod;
}

bool _edmer;
int main() {
    cerr << (&_stmer - &_edmer) / 1024.0 / 1024.0 << "MB\n";
#ifndef cxqghzj
    freopen("soft.in", "r", stdin);
    freopen("soft.out", "w", stdout);
#endif
    int n = read(), m = read();
    for (int i = 1; i < n; i++)
        edge[i].fi = read(), edge[i].se = read();
    if (n > 100) {
        init(2e5);
        for (int i = 1; i <= m; i++)
            write(C(n - 1, i - 1)), puts("");
        return 0;
    }
    for (int i = 1; i <= n; i++) {
        vis[i][i] = 1;
        for (int j = i + 1; j <= n; j++) {
            int res = 0;
            for (int k = 1; k < n; k++)
                res += i <= edge[k].fi && edge[k].fi <= j && i <= edge[k].se && edge[k].se <= j;
            vis[i][j] = res == j - i;
        }
    }
    f[0][0] = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            if (!vis[j][i]) continue;
            for (int k = 0; k < m; k++)
                f[i][k + 1] += f[j - 1][k], Mod(f[i][k + 1]);
        }
    }
    for (int i = 1; i <= m; i++)
        write(f[n][i]), puts("");
    return 0;
}
